package com.bl.utils;

import com.bl.pojo.resp.BaseResult;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;


public class QiniuUtil {

     //图片上传
     public static String upLoadImg(MultipartFile file) {
          //构造一个带指定 Region 对象的配置类
          Configuration cfg = new Configuration(Region.region2());
          //...其他参数参考类注释
          UploadManager uploadManager = new UploadManager(cfg);
          //...生成上传凭证，然后准备上传
          String accessKey = "MtroQgfSGVrzPR_wCBuNNGdd6NpGnNoW3zaZCsbR";
          String secretKey = "tJzTJlzspkCQ8HfdQywvk77b63Jrpjb6rUdDxCVl";
          String bucket = "meituandelivery";
          //默认不指定key的情况下，以文件内容的hash值作为文件名
          String key = null;
          try {
               ByteArrayInputStream byteInputStream = new ByteArrayInputStream(file.getBytes());
               Auth auth = Auth.create(accessKey, secretKey);
               String upToken = auth.uploadToken(bucket);
               try {
                    Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
                    //解析上传成功的结果
                    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                    return "http://qwwxx1dba.hn-bkt.clouddn.com/" + putRet.key;
               } catch (QiniuException ex) {
                    Response r = ex.response;
                    System.err.println(r.toString());
                    try {
                         System.err.println(r.bodyString());
                    } catch (QiniuException ex2) {
                         //ignore
                    }
               }
          } catch (UnsupportedEncodingException ex) {
               //ignore
          } catch (IOException e) {
               e.printStackTrace();
          }
          return "";
     }

     public static BaseResult packageBaseResult(MultipartFile file) {
          String imgUrl = QiniuUtil.upLoadImg(file);
          BaseResult baseResult = new BaseResult();
          if ("".equals(imgUrl)) {
               baseResult.setCode(0);
               baseResult.setMsg("上传失败！");
          } else {
               baseResult.setCode(1);
               baseResult.setMsg("上传成功！");
               baseResult.setData(imgUrl);
          }
          return baseResult;
     }

     //静态页面上传
     public static String upLoadStaticHtml(String html) {
          //构造一个带指定 Region 对象的配置类
          Configuration cfg = new Configuration(Region.region2());
          //...其他参数参考类注释
          UploadManager uploadManager = new UploadManager(cfg);
          //...生成上传凭证，然后准备上传
          String accessKey = "MtroQgfSGVrzPR_wCBuNNGdd6NpGnNoW3zaZCsbR";
          String secretKey = "tJzTJlzspkCQ8HfdQywvk77b63Jrpjb6rUdDxCVl";
          String bucket = "meituandelivery";
          //默认不指定key的情况下，以文件内容的hash值作为文件名
          String key = null;
          try {
               ByteArrayInputStream byteInputStream = new ByteArrayInputStream(html.getBytes());
               Auth auth = Auth.create(accessKey, secretKey);
               String upToken = auth.uploadToken(bucket);
               try {
                    Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
                    //解析上传成功的结果
                    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                    return "http://qwwxx1dba.hn-bkt.clouddn.com/" + putRet.key;
               } catch (QiniuException ex) {
                    Response r = ex.response;
                    System.err.println(r.toString());
                    try {
                         System.err.println(r.bodyString());
                    } catch (QiniuException ex2) {
                         //ignore
                    }
               }
          } catch (Exception e) {
               //ignore
          }
          return "";
     }

     public static BaseResult packageHtmlBaseResult(String html) {
          String staticHtml = QiniuUtil.upLoadStaticHtml(html);
          BaseResult baseResult = new BaseResult();
          if ("".equals(staticHtml)) {
               baseResult.setCode(0);
               baseResult.setMsg("上传失败！");
          } else {
               baseResult.setCode(1);
               baseResult.setMsg("上传成功！");
               baseResult.setData(staticHtml);
          }
          return baseResult;
     }
}

